Technology is an evolving field and while I published a separate article on a broader set of technologies getting momentum in 2022, this article’s focus is to highlight emerging technologies that started redefining software system architecture and product companies.
#1 — eBPF: Redefining networking, security, and observability tools
eBPF is a revolutionary technology with origins in the Linux kernel that can run sandboxed programs in a privileged context such as the operating system kernel (source: ebpf.io)
- eBPF (extended Berkeley Packet Filter) is the abstraction layer providing programmability at the Linux kernel level without rebuilding the kernel or loading any modules.
- This opens up a huge set of opportunities not for application developers but for product developers of security, observability, and networking products.
- Observability solution can now operate at instrumentation at node-level than instrumenting at Docker container-level providing accelerating performance and insights.
- Security products can leverage fine-grained security with greater control and lower resource overhead with L3-L7 level operability. Cilium’s new Tetragon component enables powerful real-time, eBPF-based security observability and runtime Enforcement.
- Networking and infrastructure solution like service mesh have started applying eBPF-based solutions (e.g. Cilium) to avoid the overhead of sidecars.
- The Istio community published a whitepaper to start accelerating service mesh using eBPF as well. Linkerd and eBPF can also coexist as suggested in this whitepaper where Cilium-based policies operate at the L3-L4 network level and Linkerd at the L7 network level.
- BumbleBee is a great tool to get started with eBPF development.
- Based on a recent article published by Solo.io, below are the key trends driving eBPF adoption in the product industry:
eBPF System Architecture can be visualized as below:
While eBPF provides great benefits of speed and performance, sandboxed security, unified tracing, programmability at kernel level and much more, it is more suitable for software product developers than web application developers.
#2 — WebAssembly: Redefining web application development
- Released in 2017 by Mozilla, it has been accepted as a standard by W3C and is now supported by Mozilla, Microsoft, Google, Apple, Fastly, Intel, and Red Hat.
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.
– Definition by webassembly.org
- WebAssembly (abbreviated as Wasm) is supported in all major browsers with the support of 40+ programming languages as a compilation target. With a small VM support in the browser, you can run Wasm binary code (written in a supported language) using JavaScript. This opens up a wide array of possibilities in writing near-native, high-performance, efficient web applications. Note that Wasm is not a replacement for JavaScript.
- While C, C++, Rust, and Golang are the best supported for production-grade WebAssembly, other languages have started maturing as well. Click here to see a working code example using Rust with WebAssembly.
- Emscripten is a complete compiler toolchain to WebAssembly, using LLVM, with a special focus on speed, size, and the Web platform. Don’t worry as you can use language-specific abstraction/tool to handle the generation.
- For Python, PyScript has been announced in PyCon 2022 to support WebAssembly.
- For Java, GraalVM, Wasmer, JWebAssembly, and TeaVM have started providing support for WebAssembly.
- Docker is in the process of integrating Wasm and currently is in technical preview mode. It now supports multiple runtime engines such as Fermyon’s spin, Deislabs’ slight, and Bytecode Alliance’s Wasmtime. Read more about Docker+Wasm by clicking here.
Below are reference set of development steps for building a WebAssembly program:
#3 — Rust: Redefining systems programming and beyond
- Rust Foundation got established in 2020 with support from companies like AWS, Google, Huawei, Microsoft, and Mozilla.
- For the sixth consecutive year, Rust is the most loved language by developers as part of Stack Overflow developer’s survey.
- Rust is becoming the preferred language of choice for systems programming primarily because of low-level memory management, higher performance, and safe concurrency benefits.
- AWS has declared it as its language of choice for systems programming and is being used for Amazon Simple Storage Service (Amazon S3), Amazon Elastic Compute Cloud (Amazon EC2), Amazon CloudFront, and more. Click here to read more.
- Rust for WebAssembly (wasm-pack) support is available to leverage Rust for building fast-paced web applications though it is relatively a new field. Click here to see a working code example invoking the Rust function from HTML & JavaScript.
- While web development is still maturing for Rust, there are multiple web frameworks available such as Rocket, Actix, Gotham, and more (see the below diagram or click here to read more about the state of web frameworks in Rust).
While Rust is one of the most competitive programming language when it comes to systems programming and tools development (e.g. AWS CLI, networking tools, etc.), it’s suitability for web development (e.g. REST API) is still evolving and other languages (Java, Python, Go, etc.) are more preferred for it.
Rust adoption by industry and companies are growing — below is a snapshot of companies using Rust (click here for the complete list):
To conclude, while there are various emerging technologies in different domains — these three technologies are on top of the list in software architecture conferences, technology blogs, design discussions, and more. They are going to reshape the future state of application architecture and will help build faster, more secure, scalable, nimble, highly available, and innovative products for different business domains.